package com.iut.cabinet.application;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Logger;

import com.iut.cabinet.metier.CabinetMedicalException;
import com.iut.cabinet.metier.CabinetTechniqueException;
import com.iut.cabinet.metier.Patient;
import com.iut.cabinet.metier.Personne;
import com.iut.cabinet.metier.PersonneDAOFichier;
import com.iut.cabinet.user.PatientDTO;

/**
 * 
 * @author Quentin et wassim
 *
 */
public class GererPatientCtrl {
	private static Logger logger = Logger.getLogger(GererPatientCtrl.class.getName());
	/**
	 * 
	 * @param unPatientDTO
	 * @throws CabinetMedicalException
	 * @throws HelperException
	 * @throws CabinetTechniqueException
	 */
	public void creerPatient(PatientDTO unPatientDTO) throws CabinetMedicalException, HelperException, CabinetTechniqueException {
		Patient unPat;
		Collection<Personne> maListe = PersonneDAOFichier.findAllPersonnes();
		unPat = HelperPatient.toPatient(unPatientDTO);

		//logger.debug(unPat);
		maListe.add(unPat);
		if (unPat.getUnAscendant() != null)
			maListe.add(unPat.getUnAscendant());

		PersonneDAOFichier.storeAllPersonnes(maListe);
	}
	/**
	 * 
	 * @return Collection<PatientDTO>
	 * @throws CabinetTechniqueException
	 * @throws HelperException
	 */
	public Collection<PatientDTO> listerPatients() throws CabinetTechniqueException, HelperException {
		Collection<Personne> listePers= PersonneDAOFichier.findAllPersonnes();
		Collection<PatientDTO> maListeDTO = new ArrayList();
		
		for (Personne unePersonne : listePers){
			if(unePersonne instanceof Patient){
				maListeDTO.add(HelperPatient.toPatientDTO((Patient)unePersonne));
			}
		}
		return maListeDTO;
	}
	/**
	 * 
	 * @param id
	 * @return boolean
	 * @throws CabinetTechniqueException
	 */
	public boolean supprimerPatients(Integer id) throws CabinetTechniqueException {
		Collection<Personne> listPersonne = PersonneDAOFichier.findAllPersonnes();

		for (Personne val : listPersonne) {
			if (val.getIdPersonne().equals(id) && val instanceof Patient) {
				listPersonne.remove(val);
				PersonneDAOFichier.storeAllPersonnes(listPersonne);
				return true;
			}
		}

		return false;

	}

	/**
	 * 
	 * @param id
	 * @return PatientDTO
	 * @throws CabinetTechniqueException
	 * @throws HelperException
	 */
	public PatientDTO rechercherPatient(Integer id) throws CabinetTechniqueException, HelperException {
		Collection<Personne> listPersonne = PersonneDAOFichier.findAllPersonnes();

		for (Personne val : listPersonne) {
			if (val.getIdPersonne().equals(id) && val instanceof Patient) {
				return HelperPatient.toPatientDTO((Patient) val);
			}
		}

		return null;

	}

	
	/**
	 * 
	 * @param pat
	 * @param id
	 * @return boolean
	 * @throws CabinetTechniqueException
	 * @throws CabinetMedicalException
	 * @throws HelperException
	 */
	public boolean modifierPatients(PatientDTO pat, Integer id) throws CabinetTechniqueException, CabinetMedicalException, HelperException {
		Collection<Personne> listPersonne = PersonneDAOFichier.findAllPersonnes();

		for (Personne val : listPersonne) {
			if (val.getIdPersonne().equals(id) && val instanceof Patient) {
				listPersonne.remove(val);
				Patient patient = HelperPatient.toPatient(pat);
				listPersonne.add(patient);
				PersonneDAOFichier.storeAllPersonnes(listPersonne);
				return true;
			}
		}

		return false;

	}

	/**
	 * 
	 * @return int
	 * @throws CabinetTechniqueException
	 */
	public int maximumId() throws CabinetTechniqueException {
		Collection<Personne> listPersonne = PersonneDAOFichier.findAllPersonnes();
		int id = 0;
		for (Personne val : listPersonne) {
			if (val.getIdPersonne() > id) {
				id = val.getIdPersonne();
			}
		}
		return id + 1;
	}

}
